package com.zpark.harmonyos_gmd_17.slider;

import ohos.aafwk.ability.AbilitySlice;
import ohos.agp.components.Component;
import ohos.agp.components.ComponentContainer;
import ohos.agp.components.LayoutScatter;
import ohos.agp.components.PageSliderProvider;

import java.util.List;

public class TabPageSliderProvider extends PageSliderProvider {

    // 定义list存放页面文件id
    private List<Integer> layoutFileIds;
    // 定义存放页面的slice对象
    private AbilitySlice abilitySlice;

    public TabPageSliderProvider(List<Integer> layoutFileIds, AbilitySlice abilitySlice) {
        this.layoutFileIds = layoutFileIds;
        this.abilitySlice = abilitySlice;
    }

    /*
        获取当前适配器中可用视图的数量。
        返回:返回可用视图的数量。
     */
    @Override
    public int getCount() {
        // 返回页面数
        return layoutFileIds.size();
    }

    /*
        在指定位置创建页。
        将该页添加到容器中的指定位置。
        参数说明:
            container（componentContainer） -显示PageSliderProvider的容器。
            position（i）—指定在容器中的位置。
        返回:返回显示的页面。
     */
    @Override
    public Object createPageInContainer(ComponentContainer componentContainer, int i) {
        // 获取页面id
        Integer id = layoutFileIds.get(i);
        /*
            基于上下文获取LayoutScatter对象。
            参数说明:context—应用的上下文。
            返回: 返回用于将XML文件转换为组件的LayoutScatter对象。
         */
        LayoutScatter layoutScatter = LayoutScatter.getInstance(abilitySlice);
        /*
            将XML文件转换为组件。
            将XML文件转换为组件后，可以将新组件添加到根组件中，在这种情况下，将返回根组件。否则，将返回已创建的组件。
            参数说明:
                xmlId - XML文件ID。
                root -表示根组件。
                attachToRoot -是否添加到根组件。
            返回:
                返回从XML文件转换的组件，该组件可以是组件本身，也可以是根组件(如果组件被添加到根组件中)。
         */
        Component component = layoutScatter.parse(id, null, false);
        // 将一个组件添加到根组件队列的末尾。
        componentContainer.addComponent(component);
        // 返回组件
        return component;
    }

    /*
        销毁容器中的指定页。
        参数说明:
            container—页面适配器所属的容器。
            position—指定在容器中的位置。
            object -指定要销毁的页面。
     */
    @Override
    public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
        // 从父组件中移除子组件。
        componentContainer.removeComponent((Component) o);
    }

    /*
        检查组件是否与createPageInContainer(ohos.agp.components.ComponentContainer,int)返回的特定对象相关联。
        参数说明:
            page -表示要检查的组件。
            object—与要检查的组件关联的对象。
        返回:组件是否与对象关联。
     */
    @Override
    public boolean isPageMatchToObject(Component component, Object o) {
        return true;
    }
}
